#include <iostream>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int N=110;
int e[20000],ne[20000],h[N],idx,p[20000];
int n,m;
int s=0;
int st[N];
struct thing{
	int w;
	int l;
}t[N];
void add(int a,int b,int c)
{
	e[idx]=b;
	p[idx]=c;
	ne[idx]=h[a];
	h[a]=idx;
	idx++;
}
int dfs(int num,int l,int r)
{
	int sum=0;
	int f=1;
	int sum1=INF;
	for(int i=h[num];i!=-1;i=ne[i])
	{
		sum1=min(sum1,t[num].w);
		int j=e[i];
		if(l<=t[j].l && t[j].l<=r)
		{
			if(st[j])
			{
				sum1=min(sum1,st[j]);
				continue;
			}
			int ll=t[j].l-m;
			int rr=t[j].l+m;
			st[j]=dfs(j,max(ll,l),min(rr,r))+p[i];
			sum1=min(st[j],sum1);
		}
		else
		{
			f=0;
		}
	}
	if(f && sum1==INF)
	{
		sum1=t[num].w;
	}
	sum=sum1;
	return sum;
}
int main()
{
	memset(h,-1,sizeof(h));
	cin>>m>>n;
	for(int i=1;i<=n;i++)
	{
		int num=0;
		cin>>t[i].w>>t[i].l>>num;
		for(int j=0;j<num;j++)
		{
			int b,c;
			cin>>b>>c;
			add(i,b,c);
		}
		
	}
	s=t[1].l;
	cout<<min(dfs(1,s-m,s+m),t[1].w);

	return 0;
}

